package com.douma.arr;


public class Factorial {

    // 时间复杂度：O(n)
    // 空间复杂度：O(1)
    public long factorialIter(int n) {

        long res = 1;
        for (int i = n; i > 0; i--) {
            res *= i;
        }

        return res;
    }

    // 尾递归
    // 时间复杂度：O(n)
    // 空间复杂度：O(n)
    public long factorial(int n, long res) {
        if (n <= 0) return 0;
        // 最小子问题
        if (n == 1) return res;
        return factorial(n - 1, n * res);
    }

    public static void main(String[] args) {
        System.out.println(new Factorial().factorial(6, 1));
    }
}
